home *** CD-ROM | disk | FTP | other *** search
-
-
-
- uuuuiiiioooo((((DDDD4444)))) uuuuiiiioooo((((DDDD4444))))
-
-
-
- NNNNAAAAMMMMEEEE
- _uuuu_iiii_oooo - scatter/gather I/O request structure
-
- SSSSYYYYNNNNOOOOPPPPSSSSIIIISSSS
- _####_iiii_nnnn_cccc_llll_uuuu_dddd_eeee _<<<<_ssss_yyyy_ssss_////_tttt_yyyy_pppp_eeee_ssss_...._hhhh_>>>>
- _####_iiii_nnnn_cccc_llll_uuuu_dddd_eeee _<<<<_ssss_yyyy_ssss_////_ffff_iiii_llll_eeee_...._hhhh_>>>>
- _####_iiii_nnnn_cccc_llll_uuuu_dddd_eeee _<<<<_ssss_yyyy_ssss_////_uuuu_iiii_oooo_...._hhhh_>>>>
- _####_iiii_nnnn_cccc_llll_uuuu_dddd_eeee _<<<<_ssss_yyyy_ssss_////_dddd_dddd_iiii_...._hhhh_>>>>
-
- DDDDEEEESSSSCCCCRRRRIIIIPPPPTTTTIIIIOOOONNNN
- The _uuuu_iiii_oooo structure describes an I/O request that can be broken up into
- different data storage areas (scatter/gather I/O). A request is a list
- of _iiii_oooo_vvvv_eeee_cccc(D4) structures (base/length pairs) indicating where in user
- space or kernel space the data are to be read/written.
-
- UUUUSSSSAAAAGGGGEEEE
- The contents of the _uuuu_iiii_oooo structure passed to the driver through the entry
- points in section D2 should not be changed directly by the driver. The
- _uuuu_iiii_oooo_mmmm_oooo_vvvv_eeee(D3), _uuuu_rrrr_eeee_aaaa_dddd_cccc(D3), and _uuuu_wwww_rrrr_iiii_tttt_eeee_cccc(D3) functions take care of
- maintaining the _uuuu_iiii_oooo structure. A block driver may also use the
- _pppp_hhhh_yyyy_ssss_iiii_oooo_cccc_kkkk(D3) function to perform unbuffered I/O. _pppp_hhhh_yyyy_ssss_iiii_oooo_cccc_kkkk also takes
- care of maintaining the _uuuu_iiii_oooo structure.
-
- A driver that creates its own _uuuu_iiii_oooo structures for a data transfer is
- responsible for zeroing it prior to initializing members accessible to
- the driver. The driver must not change the _uuuu_iiii_oooo structure afterwards; the
- functions take care of maintaining the _uuuu_iiii_oooo structure.
-
- Note that a separate interface does not currently exist for allocating
- _uuuu_iiii_oooo(D4) and _iiii_oooo_vvvv_eeee_cccc(D4) structures when the driver needs to create them
- itself. Therefore, the driver may either use _kkkk_mmmm_eeee_mmmm______zzzz_aaaa_llll_llll_oooo_cccc(D3) to allocate
- them, or allocate them statically.
-
- SSSSttttrrrruuuuccccttttuuuurrrreeee DDDDeeeeffffiiiinnnniiiittttiiiioooonnnnssss
- The _uuuu_iiii_oooo structure contains the following members:
-
- _iiii_oooo_vvvv_eeee_cccc______tttt _****_uuuu_iiii_oooo______iiii_oooo_vvvv_;;;; _////_**** _PPPP_oooo_iiii_nnnn_tttt_eeee_rrrr _tttt_oooo _tttt_hhhh_eeee _ssss_tttt_aaaa_rrrr_tttt _oooo_ffff _tttt_hhhh_eeee _iiii_oooo_vvvv_eeee_cccc _****_////
- _////_**** _aaaa_rrrr_rrrr_aaaa_yyyy _ffff_oooo_rrrr _tttt_hhhh_eeee _uuuu_iiii_oooo _ssss_tttt_rrrr_uuuu_cccc_tttt_uuuu_rrrr_eeee _****_////
- _iiii_nnnn_tttt _uuuu_iiii_oooo______iiii_oooo_vvvv_cccc_nnnn_tttt_;;;; _////_**** _TTTT_hhhh_eeee _nnnn_uuuu_mmmm_bbbb_eeee_rrrr _oooo_ffff _iiii_oooo_vvvv_eeee_cccc_ssss _iiii_nnnn _tttt_hhhh_eeee _aaaa_rrrr_rrrr_aaaa_yyyy _****_////
- _oooo_ffff_ffff______tttt _uuuu_iiii_oooo______oooo_ffff_ffff_ssss_eeee_tttt_;;;; _////_**** _OOOO_ffff_ffff_ssss_eeee_tttt _iiii_nnnn_tttt_oooo _ffff_iiii_llll_eeee _wwww_hhhh_eeee_rrrr_eeee _dddd_aaaa_tttt_aaaa _aaaa_rrrr_eeee _****_////
- _////_**** _tttt_rrrr_aaaa_nnnn_ssss_ffff_eeee_rrrr_rrrr_eeee_dddd _ffff_rrrr_oooo_mmmm _oooo_rrrr _tttt_oooo _****_////
- _ssss_hhhh_oooo_rrrr_tttt _uuuu_iiii_oooo______ssss_eeee_gggg_ffff_llll_gggg_;;;; _////_**** _IIII_dddd_eeee_nnnn_tttt_iiii_ffff_iiii_eeee_ssss _tttt_hhhh_eeee _tttt_yyyy_pppp_eeee _oooo_ffff _IIII_////_OOOO _tttt_rrrr_aaaa_nnnn_ssss_ffff_eeee_rrrr _****_////
- _ssss_hhhh_oooo_rrrr_tttt _uuuu_iiii_oooo______ffff_mmmm_oooo_dddd_eeee_;;;; _////_**** _FFFF_iiii_llll_eeee _mmmm_oooo_dddd_eeee _ffff_llll_aaaa_gggg_ssss _****_////
- _iiii_nnnn_tttt _uuuu_iiii_oooo______rrrr_eeee_ssss_iiii_dddd_;;;; _////_**** _RRRR_eeee_ssss_iiii_dddd_uuuu_aaaa_llll _cccc_oooo_uuuu_nnnn_tttt _****_////
-
- The driver may only set _uuuu_iiii_oooo structure members to initialize them for a
- data transfer for which the driver created the _uuuu_iiii_oooo structure. The driver
- must not otherwise change _uuuu_iiii_oooo structure members. However, drivers may
- read them. The _uuuu_iiii_oooo structure members available for the driver to test or
- set are described below:
-
-
-
-
-
- PPPPaaaaggggeeee 1111
-
-
-
-
-
-
- uuuuiiiioooo((((DDDD4444)))) uuuuiiiioooo((((DDDD4444))))
-
-
-
- _uuuu_iiii_oooo______iiii_oooo_vvvv contains a pointer to the _iiii_oooo_vvvv_eeee_cccc array for the _uuuu_iiii_oooo structure. If
- the driver creates a _uuuu_iiii_oooo structure for a data transfer, an associated
- _iiii_oooo_vvvv_eeee_cccc array must also be created by the driver.
-
- _uuuu_iiii_oooo______iiii_oooo_vvvv_cccc_nnnn_tttt contains the number of elements in the _iiii_oooo_vvvv_eeee_cccc array for the _uuuu_iiii_oooo
- structure.
-
- _uuuu_iiii_oooo______oooo_ffff_ffff_ssss_eeee_tttt contains the starting logical byte address on the device where
- the data transfer is to occur. Applicability of this field to the driver
- is device-dependent. It applies to randomly accessed devices, but may
- not apply to all sequentially accessed devices.
-
- _uuuu_iiii_oooo______ssss_eeee_gggg_ffff_llll_gggg identifies the virtual address space in which the transfer
- data areas reside. The value _UUUU_IIII_OOOO______SSSS_YYYY_SSSS_SSSS_PPPP_AAAA_CCCC_EEEE indicates the data areas are
- within kernel space. The value _UUUU_IIII_OOOO______UUUU_SSSS_EEEE_RRRR_SSSS_PPPP_AAAA_CCCC_EEEE indicates one data area is
- within kernel space and the other is within the user space of the current
- process context.
-
- _uuuu_iiii_oooo______ffff_mmmm_oooo_dddd_eeee contains flags describing the file access mode for which the
- data transfer is to occur. Valid flags are:
-
- _FFFF_NNNN_DDDD_EEEE_LLLL_AAAA_YYYY The driver should not wait if the requested data
- transfer cannot occur immediately; it should terminate
- the request without indicating an error occurred. The
- driver's implementation of this flag's implied
- semantics are subject to device-dependent
- interpretation.
-
- _FFFF_NNNN_OOOO_NNNN_BBBB_LLLL_OOOO_CCCC_KKKK The driver should not wait if the requested data
- transfer cannot occur immediately; it should terminate
- the request, returning the _EEEE_AAAA_GGGG_AAAA_IIII_NNNN error code as the
- completion status [see _eeee_rrrr_rrrr_nnnn_oooo_ssss(D5)]. The driver's
- implementation of the implied semantics of this flag
- are subject to device-dependent interpretation.
-
- If the driver creates a _uuuu_iiii_oooo structure for a data transfer, it may set the
- flags described above in _uuuu_iiii_oooo______ffff_mmmm_oooo_dddd_eeee.
-
- _uuuu_iiii_oooo______rrrr_eeee_ssss_iiii_dddd indicates the number of bytes that have not been transferred to
- or from the data area. If the driver creates a _uuuu_iiii_oooo structure for a data
- transfer, _uuuu_iiii_oooo______rrrr_eeee_ssss_iiii_dddd is initialized by the driver as the number of bytes
- to be transferred. Note that a separate interface does not currently
- exist for allocating a _uuuu_iiii_oooo structure.
-
- RRRREEEEFFFFEEEERRRREEEENNNNCCCCEEEESSSS
- _iiii_oooo_vvvv_eeee_cccc(D4), _pppp_hhhh_yyyy_ssss_iiii_oooo_cccc_kkkk(D3), _rrrr_eeee_aaaa_dddd(D2), _uuuu_iiii_oooo_mmmm_oooo_vvvv_eeee(D3), _uuuu_rrrr_eeee_aaaa_dddd_cccc(D3), _uuuu_wwww_rrrr_iiii_tttt_eeee_cccc(D3),
- _wwww_rrrr_iiii_tttt_eeee(D2)
-
-
-
-
-
-
-
-
- PPPPaaaaggggeeee 2222
-
-
-
-